package com.oss.util.easyexcel;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.alibaba.excel.write.metadata.fill.FillWrapper;

import java.util.List;

/**
 * excel模板导出
 * @author chengqiang
 */
public class EasyExcelExportByTemplateUtil {
    /**
     * 普通模板导出-数据源为list
     * 无法控制某一行是否展示 , 也不可以替换模板中的占位符
     * @param filePath      导出的文件路径(包含文件名和后缀)
     * @param templatePath  模板路径
     * @param dataList      导出的数据源 (模板使用{data.属性名称})
     */
    public static void exportExcelByTemplate(String filePath, String templatePath, List dataList){
        ExcelWriter excelWriter = EasyExcel.write(filePath).withTemplate(templatePath).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        FillConfig fillConfig = FillConfig.builder().build();
        fillConfig.setForceNewRow(true);
        if (dataList.size() > 0){
            // 多行数据每次都是新建一行渲染数据,excel模板中的占位符为{data.xxx}
            excelWriter.fill(new FillWrapper("data", dataList), fillConfig, writeSheet);
        }
        excelWriter.finish();
    }
    /**
     * 普通模板导出-数据源为Object
     * 无法控制某一行是否展示 , 也不可以替换模板中的占位符
     * @param filePath      导出的文件路径(包含文件名和后缀)
     * @param templatePath  模板路径
     * @param obj          导出的数据源(模板中直接{属性名称})
     */
    public static void exportExcelByTemplate(String filePath, String templatePath, Object obj){
        ExcelWriter excelWriter = EasyExcel.write(filePath).withTemplate(templatePath).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        excelWriter.fill(obj,  writeSheet);
        excelWriter.finish();
    }

    /**
     * 普通模板导出-数据源为list和object混合
     * 无法控制某一行是否展示 , 也不可以替换模板中的占位符
     * @param outPath      导出的文件路径(包含文件名和后缀)
     * @param templatePath  模板路径
     * @param dataList      导出的数据源1(模板使用{data.属性名称})
     * @param dataObj       导出的数据源2(模板中直接{属性名称})
     */
    public static void exportExcelByTemplate(String outPath, String templatePath, List dataList,Object dataObj){
        ExcelWriter excelWriter = EasyExcel.write(outPath).withTemplate(templatePath).build();
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        FillConfig fillConfig = FillConfig.builder().build();
        fillConfig.setForceNewRow(true);
        if (dataList.size() > 0){
            // 多行数据每次都是新建一行渲染数据,excel模板中的占位符为{data.xxx}
            excelWriter.fill(new FillWrapper("data", dataList), fillConfig, writeSheet);
        }
        excelWriter.fill(dataObj,  writeSheet);
        excelWriter.finish();
    }
}